﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using TOAcademias;

namespace DAOAcademias
{
    public class DOPeriodo
    {
         DBModuloAcademiasDataContext dbml;

         public DOPeriodo()
        {
            dbml = new DBModuloAcademiasDataContext();
        }

        public List<TOPeriodo> obtenerPeriodos()
        {

            List<TOPeriodo> listaPeriodos = new List<TOPeriodo>();

            var periodos = (from per in dbml.PERIODOs
                           select per
                             ) ;

            foreach (var periodo in periodos) {

                TOPeriodo toPeriodo = new TOPeriodo();
                toPeriodo.Codigo = periodo.COD_PERIODO;
                toPeriodo.Descripcion = periodo.DES_PERIODO;
                toPeriodo.FechaInicio=periodo.FEC_INICIO;
                toPeriodo.FechaFin = periodo.FEC_FIN;
                toPeriodo.Estado = periodo.ESTADO;

                listaPeriodos.Add(toPeriodo);
            
            }
            
            return listaPeriodos;
        }


        public TOPeriodo obtenerPeriodoActivo()
        {

            List<TOPeriodo> listaPeriodos = new List<TOPeriodo>();

            var periodo = (from per in dbml.PERIODOs
                            where per.ESTADO=="ACTIVO"
                            select per
                             ).Single();
          
                TOPeriodo toPeriodo = new TOPeriodo();
                toPeriodo.Codigo = periodo.COD_PERIODO;
                toPeriodo.Descripcion = periodo.DES_PERIODO;
                toPeriodo.FechaInicio = periodo.FEC_INICIO;
                toPeriodo.FechaFin = periodo.FEC_FIN;
                toPeriodo.Estado = periodo.ESTADO;

            return toPeriodo;
        }

        public void insertarPeriodo(TOPeriodo toPeriodo)
        {
            List<TOPeriodo> listaPeriodos= obtenerPeriodos();

            int aux = 0;
            int temp=0;
            foreach (TOPeriodo periodo in listaPeriodos)
            {
                temp=Convert.ToInt32(periodo.Codigo.Substring(2));
                if (temp > aux) {

                    aux = temp;
                }
            }

            aux = aux + 1;
            string codigo = ""+aux;
            codigo = "PE000".Substring(0, 5 - codigo.Length)+aux;

            PERIODO per = new PERIODO();
            per.COD_PERIODO = codigo;
            per.DES_PERIODO = toPeriodo.Descripcion;
            per.FEC_INICIO = toPeriodo.FechaInicio;
            per.FEC_FIN = toPeriodo.FechaFin;
            per.ESTADO = toPeriodo.Estado;

            dbml.PERIODOs.InsertOnSubmit(per);
            dbml.SubmitChanges();
            toPeriodo.Codigo = codigo;

            if (toPeriodo.Estado == "ACTIVO")
            {
                modificarEstadoPeriodos(toPeriodo);
            }
        }

        public void modificarPeriodo(TOPeriodo toPeriodo)
        {
            var periodo = (from per in dbml.PERIODOs
                            where per.COD_PERIODO == toPeriodo.Codigo
                            select per).Single();

            periodo.DES_PERIODO = toPeriodo.Descripcion;
            periodo.FEC_INICIO = toPeriodo.FechaInicio;
            periodo.FEC_FIN = toPeriodo.FechaFin;
            periodo.ESTADO = toPeriodo.Estado;

            dbml.SubmitChanges();

        }

        public void modificarEstadoPeriodos(TOPeriodo toPeriodo)
        {
            var periodos = (from per in dbml.PERIODOs
                           where per.COD_PERIODO != toPeriodo.Codigo
                           select per);

            foreach (var periodo in periodos)
            {
                periodo.ESTADO = "INACTIVO";          
            }

            dbml.SubmitChanges();

        }
    }
}
